﻿<UserControl x:Class="GTServices.WPF.Client.Views.CategoryView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:ent="clr-namespace:GTServices.Entities;assembly=GTServices.Entities"
             xmlns:sys="clr-namespace:System;assembly=mscorlib"
             xmlns:cal="clr-namespace:Caliburn.Micro;assembly=Caliburn.Micro"
             xmlns:controls="clr-namespace:GTServices.WPF.Client.Controls"
             xmlns:converters="clr-namespace:GTServices.WPF.Client.Converters"
             xmlns:ext="clr-namespace:GTServices.WPF.Client.Extensions"
             mc:Ignorable="d" 
             d:DesignHeight="598" d:DesignWidth="300">
    <DockPanel LastChildFill="True">
        <DockPanel.Resources>
           
            <converters:BoolToVisabilityConverter x:Key="boolToVisConverter"/>
        </DockPanel.Resources>
        
        <StackPanel DockPanel.Dock="Top">
            <UniformGrid Columns="2" Rows="1" IsEnabled="False">
                    <GroupBox Header="Id">
                        <TextBox Text="{Binding Category.Id}" HorizontalContentAlignment="Right"/>
                    </GroupBox>
                </UniformGrid>
            <GroupBox Header="Name">
                <TextBox Text="{Binding Name, UpdateSourceTrigger=PropertyChanged}" />
            </GroupBox>
            <GroupBox Header="Severity" >
                <TextBox Text="{Binding Severity, UpdateSourceTrigger=PropertyChanged}" />
            </GroupBox>
            <!-- These options are for a possible server side component. 
            <GroupBox Header="Options" >
                <StackPanel>
                    <CheckBox Content="Public?" IsChecked="{Binding IsPublic}" />
                    <CheckBox Content="Moderated?" IsChecked="{Binding Moderated}" />
                </StackPanel>
            </GroupBox>
            -->
            <GroupBox Header="Classification">
                <DockPanel>
                    <controls:ClickableLabel DockPanel.Dock="Right" Text="Select" 
                                             cal:Message.Attach="[Event Click] = [Action SelectClassification()]"
                                              />
                    <TextBox IsReadOnly="True" DockPanel.Dock="Left" Text="{Binding Classification.Name}"/>
                </DockPanel>

            </GroupBox>
            <GroupBox Header="Template">
                <DockPanel>
                    <controls:ClickableLabel DockPanel.Dock="Right" Text="Select" 
                                             cal:Message.Attach="[Event Click] = [Action SelectTemplate()]"
                                              />
                    <TextBox IsReadOnly="True" DockPanel.Dock="Left" Text="{Binding Template.Name}"/>
                </DockPanel>
                
            </GroupBox>
        </StackPanel>
        <TabControl DockPanel.Dock="Bottom">
            <TabControl.Resources>
                <!-- Default Control template slightly modified -->
                <Style x:Key="TabItemFocusVisual">
                    <Setter Property="Control.Template">
                        <Setter.Value>
                            <ControlTemplate>
                                <Rectangle Margin="3,3,3,1"
                               StrokeThickness="1"
                               Stroke="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"
                               StrokeDashArray="1 2"
                               SnapsToDevicePixels="true"/>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>




                <LinearGradientBrush x:Key="TabItemHotBackground"
                         StartPoint="0,0"
                         EndPoint="0,1">
                    <LinearGradientBrush.GradientStops>
                        <GradientStop Color="#EAF6FD"
                          Offset="0.15"/>
                        <GradientStop Color="#D9F0FC"
                          Offset=".5"/>
                        <GradientStop Color="#BEE6FD"
                          Offset=".5"/>
                        <GradientStop Color="#A7D9F5"
                          Offset="1"/>
                    </LinearGradientBrush.GradientStops>
                </LinearGradientBrush>
                <SolidColorBrush x:Key="TabItemSelectedBackground"
                     Color="#F9F9F9"/>
                <SolidColorBrush x:Key="TabItemDisabledBackground"
                     Color="#F4F4F4"/>
                <SolidColorBrush x:Key="TabItemHotBorderBrush"
                     Color="#3C7FB1"/>
                <SolidColorBrush x:Key="TabItemDisabledBorderBrush"
                     Color="#FFC9C7BA"/>
                <Style TargetType="{x:Type TabItem}">
                    <Setter Property="Padding" Value="4" />

                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="{x:Type TabItem}">
                                <Grid SnapsToDevicePixels="true">
                                    <Border Name="Bd"
                                            Padding="{TemplateBinding Padding}"
                                            BorderBrush="{TemplateBinding BorderBrush}"
                                            Background="{TemplateBinding Background}"
                                            BorderThickness="1,1,1,0"
                                            CornerRadius="6,6,0,0"
                                            >
                                        <ContentPresenter Name="Content"
                                              ContentSource="Header"
                                              SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
                                              HorizontalAlignment="{Binding Path=HorizontalContentAlignment,RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"
                                              VerticalAlignment="{Binding Path=VerticalContentAlignment,RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"
                                              RecognizesAccessKey="True"/>
                                    </Border>
                                </Grid>
                                <ControlTemplate.Triggers>
                                    <Trigger Property="IsMouseOver"
                                 Value="true">
                                        <Setter TargetName="Bd"
                                    Property="Background"
                                    Value="{StaticResource TabItemHotBackground}"/>
                                    </Trigger>
                                    <Trigger Property="IsSelected"
                                 Value="true">
                                        <Setter Property="Panel.ZIndex"
                                    Value="1"/>
                                        <Setter TargetName="Bd"
                                    Property="Background"
                                    Value="{StaticResource TabItemSelectedBackground}"/>
                                    </Trigger>
                                    <MultiTrigger>
                                        <MultiTrigger.Conditions>
                                            <Condition Property="IsSelected"
                                           Value="false"/>
                                            <Condition Property="IsMouseOver"
                                           Value="true"/>
                                        </MultiTrigger.Conditions>
                                        <Setter TargetName="Bd"
                                    Property="BorderBrush"
                                    Value="{StaticResource TabItemHotBorderBrush}"/>
                                    </MultiTrigger>
                                    <Trigger Property="TabStripPlacement"
                                 Value="Bottom">
                                        <Setter TargetName="Bd"
                                    Property="BorderThickness"
                                    Value="1,0,1,1"/>
                                    </Trigger>
                                    <Trigger Property="TabStripPlacement"
                                 Value="Left">
                                        <Setter TargetName="Bd"
                                    Property="BorderThickness"
                                    Value="1,1,0,1"/>
                                    </Trigger>
                                    <Trigger Property="TabStripPlacement"
                                 Value="Right">
                                        <Setter TargetName="Bd"
                                    Property="BorderThickness"
                                    Value="0,1,1,1"/>
                                    </Trigger>
                                    <MultiTrigger>
                                        <MultiTrigger.Conditions>
                                            <Condition Property="IsSelected"
                                           Value="true"/>
                                            <Condition Property="TabStripPlacement"
                                           Value="Top"/>
                                        </MultiTrigger.Conditions>
                                        <Setter Property="Margin"
                                    Value="-2,-2,-2,-1"/>
                                        <Setter TargetName="Content"
                                    Property="Margin"
                                    Value="0,0,0,1"/>
                                    </MultiTrigger>
                                    <MultiTrigger>
                                        <MultiTrigger.Conditions>
                                            <Condition Property="IsSelected"
                                           Value="true"/>
                                            <Condition Property="TabStripPlacement"
                                           Value="Bottom"/>
                                        </MultiTrigger.Conditions>
                                        <Setter Property="Margin"
                                    Value="-2,-1,-2,-2"/>
                                        <Setter TargetName="Content"
                                    Property="Margin"
                                    Value="0,1,0,0"/>
                                    </MultiTrigger>
                                    <MultiTrigger>
                                        <MultiTrigger.Conditions>
                                            <Condition Property="IsSelected"
                                           Value="true"/>
                                            <Condition Property="TabStripPlacement"
                                           Value="Left"/>
                                        </MultiTrigger.Conditions>
                                        <Setter Property="Margin"
                                    Value="-2,-2,-1,-2"/>
                                        <Setter TargetName="Content"
                                    Property="Margin"
                                    Value="0,0,1,0"/>
                                    </MultiTrigger>
                                    <MultiTrigger>
                                        <MultiTrigger.Conditions>
                                            <Condition Property="IsSelected"
                                           Value="true"/>
                                            <Condition Property="TabStripPlacement"
                                           Value="Right"/>
                                        </MultiTrigger.Conditions>
                                        <Setter Property="Margin"
                                    Value="-1,-2,-2,-2"/>
                                        <Setter TargetName="Content"
                                    Property="Margin"
                                    Value="1,0,0,0"/>
                                    </MultiTrigger>
                                    <Trigger Property="IsEnabled"
                                 Value="false">
                                        <Setter TargetName="Bd"
                                    Property="Background"
                                    Value="{StaticResource TabItemDisabledBackground}"/>
                                        <Setter TargetName="Bd"
                                    Property="BorderBrush"
                                    Value="{StaticResource TabItemDisabledBorderBrush}"/>
                                        <Setter Property="Foreground"
                                    Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
                                    </Trigger>
                                </ControlTemplate.Triggers>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
            </TabControl.Resources>
            <TabItem Header="Patterns">
                <DockPanel>
                    <ListView DockPanel.Dock="Left" 
                              cal:Message.Attach="[Event SelectionChanged] = [Action SelectedPatternItemChanged($executionContext)]"
                              ItemsSource="{Binding Patterns}" 
                              ext:GridViewSort.AutoSort="True"
                              ScrollViewer.VerticalScrollBarVisibility="Visible">
                        <ListView.ItemContainerStyle>
                            <Style TargetType="{x:Type ListViewItem}">
                                <Setter Property="ToolTip" Value="{Binding CategoriesAsString}" />
                            </Style>
                        </ListView.ItemContainerStyle>
                        <ListView.ContextMenu>
                            <ContextMenu>
                                <MenuItem Header="Add" cal:Message.Attach="AddPattern()" />
                                <MenuItem Header="Remove" cal:Message.Attach="RemovePatterns()" />
                            </ContextMenu>
                        </ListView.ContextMenu>
                        <ListView.View>
                            <GridView>
                                <GridViewColumn Header="Pattern" Width="Auto" DisplayMemberBinding="{Binding PatternStr}" ext:GridViewSort.PropertyName="Pattern.PatternStr" />
                                <GridViewColumn Header="Language" Width="Auto" DisplayMemberBinding="{Binding Language.Name}" ext:GridViewSort.PropertyName="Language.Name" />
                            </GridView>
                        </ListView.View>
                    </ListView>
                </DockPanel>
            </TabItem>
            <TabItem Header="Description">
                <DockPanel>
                    <TextBox   TextWrapping="Wrap" AcceptsReturn="True" Text="{Binding Description, UpdateSourceTrigger=PropertyChanged}" />
                </DockPanel>
            </TabItem>
            <TabItem Header="Exploit Scenario">
                <DockPanel>
                    <TextBox  TextWrapping="Wrap" AcceptsReturn="True" Text="{Binding ExploitScenario, UpdateSourceTrigger=PropertyChanged}" />
                </DockPanel>
            </TabItem>

            <TabItem Header="Reccommendation">
                <DockPanel>
                    <TextBox  TextWrapping="Wrap" AcceptsReturn="True" Text="{Binding Recommendation, UpdateSourceTrigger=PropertyChanged}"/>
                </DockPanel>
            </TabItem>
            <TabItem Header="References">
                <DockPanel>
                    <TextBox  TextWrapping="Wrap" AcceptsReturn="True" Text="{Binding References, UpdateSourceTrigger=PropertyChanged}"/>
                </DockPanel>
            </TabItem>
        </TabControl>
    </DockPanel>
</UserControl>
